package EnumDemo;

/**
 * @Description :
 * @author: cww
 * @DateTime: 2018-07-29 15:53
 * 带有抽象方法的枚举类
 */

public enum EnumAbstract {
    /**
     * RED,GREEN,YELLOW这些是EnumAbstract的子类实例对象
     * 每个成员都是匿名子类实现的，具体体现在class目录中这些
     * RED等都是一个子类
     */
    RED(3000){
        /**
         * 2.子类实现父类的抽象方法
         * @return
         */
        @Override
        public EnumAbstract nextLamp(){
            System.out.println("=====红灯的时长为3秒=====");
            return GREEN;
        }
    },
    GREEN(2000){
        @Override
        public EnumAbstract nextLamp(){
            System.out.println("=====红灯的时长为2秒=====");
            return YELLOW;
        }
    },
    YELLOW(1000){
        @Override
        public EnumAbstract nextLamp(){
            System.out.println("=====红灯的时长为1秒=====");
            return RED;
        }
    };

    /**
     * 1.抽象的枚举方法
     *   子类要继承父类的所有方法
     *   也就是上面的常量类要实现父类的抽象方法在后面加上{}
     * @return
     */
    public abstract EnumAbstract nextLamp();
    /**
     * 3.为了让交通灯有时间属性，定义一个私有变量
     */
    private int time;

    /**
     * 4.定义带参的构造方法带入时间
     * 每个常量后面则需要传入构造方法的参数RED(300)
     * @param time
     */
    private EnumAbstract(int time) {
        this.time = time;
    }

    String getTemp(){
        return Integer.toString(this.time)+"   "+this;
    }
}
